home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_56 / typdef.inc < prev    next >
Text File  |  1995-01-01  |  7KB  |  123 lines

  1. TYPE  { look also for assembler structurs in 'GENERAL.DEF' - must be equal !! }
  2.  
  3.       DWord= record      { you can access dword values now in different ways :
  4.                           however it's never used :) for some action }
  5.               case integer of
  6.                 0: (DD:Longint);
  7.                 1: (LX,HX:word);
  8.                 2: (Rea,Int:Word);
  9.             end;
  10.       THeader = record name:array[0..27] of char;
  11.                       charEOF:char;  { should be 1Ah }
  12.                       filetyp:byte;
  13.                       dummy1 :word;
  14.                       ordnum :word;
  15.                       Insnum :word;
  16.                       Patnum :word;
  17.                       Flags  :word;
  18.                       CWTV   :word; { bit 12 = 1 -> created with screamtracker }
  19.                                     { bit 11..0  -> tracker version:
  20.                                       11..8 = major version,7..0 = minor version }
  21.                       FFv    :word; { fileformatversion }
  22.                       SCRM_ID:array[0..3] of char; { should be 'SCRM' }
  23.                       gvolume:byte;       { global volume }
  24.                       initialspeed:byte;
  25.                       initialtempo:byte;
  26.                       mvolume:byte;       { mastervolume }
  27.                       dummy2 :array[0..9] of byte;
  28.                       special:word;       { not used up2now }
  29.                       channelset:array[0..31] of byte;
  30.                     end;
  31.  
  32.      PSmpHeader = ^TSmpHeader;
  33.      TSmpHeader = record typ:byte;
  34.                          dosname:array[0..11] of char;
  35.                          hi_mempos:byte;
  36.                          mempos:word;
  37.                          length:longint;
  38.                          loopbeg:longint;
  39.                          loopend:longint;
  40.                          vol:byte;
  41.                          dummy1:byte;
  42.                          packinfo:byte;
  43.                          Flags:byte;
  44.                          c2speed:longint;
  45.                          dummy2:longint;
  46.                          GUS_addr:word;
  47.                          SB_Flags:word;
  48.                          SB_last:longint;
  49.                          name:array[0..27] of char;
  50.                          SCRS_ID:array[0..3] of char;
  51.                        end;
  52.  
  53.      PAdlHeader = ^TAdlHeader;
  54.      TAdlHeader = record typ:byte;
  55.                          dosname:array[0..11] of char;
  56.                          dummy1:array[0..2] of byte;
  57.                          Data:array[0..11] of byte;
  58.                          Vol:byte;
  59.                          Dsk:byte;
  60.                          dummy2:word;
  61.                          C2spd:longint;
  62.                          dummy3:array[0..11] of byte;
  63.                          name:array[0..27] of char;
  64.                          SCRI_ID:array[0..3] of char;
  65.                        end;
  66.  
  67.       TCHANNEL = record
  68.                    { general switches : }
  69.                    enabled     :boolean;  { byte: flag if =0 then nothing to mix at the moment }
  70.                    channeltyp  :byte;     { 0=off,1=left,2=right,3,4=adlib ... if 0,3,4 -> everything ignored ! }
  71.                    { current sampledata : }
  72.                    InstrSEG    :word;     { pointer to current instrument data }
  73.                    SampleSEG   :word;     { DOS segment of current sampledata }
  74.                    InstrNo    :byte;      { number of instrument is currently playing }
  75.                    Note        :byte;     { Notenumber is currently playing (except if effects change it...) }
  76.                    { copy of sampledata (maybe it differs a bit): }
  77.                    SampleVol   :byte;     { current sample volume }
  78.                    sLoopflag   :boolean;  { flag if we have to loop sample }
  79.                    sSmpstart   :word;     { default is 0, but if there's a set sample offset, it changes }
  80.                    sLoopstart  :word;     { loop start of current sample =0ffffh if no loop }
  81.                    sLoopend    :word;     { loop end of current sample }
  82.                    sCurPos     :dword;    { fixed point value for current position in sample }
  83.                    sStep       :dword;    { fixed point value of frequency step (distance of one step
  84.                                             depends on period we play currently) }
  85.                    sPeriod     :word;     { st3 period ... you know these amiga values (look at tech.doc of ST3) }
  86.                                           { period does no influence playing a sample direct, but it's for sliding etc. }
  87.                    lower_border:word;     { B-7 or B-5 period for current instrument to check limits }
  88.                    upper_border:word;     { C-0 or C-3 period for current instrument to check limits }
  89.                    { effect info : }
  90.                    command     :word;     { 2 times effectnumber (for using a jmptable) }
  91.                    cmd2nd      :word;     { 2 times additional command for multiple effects }
  92.                    parameter   :byte;     { just the parameters }
  93.                    { data for handling effects : }
  94.                    continueEf  :boolean;  { Flag if we should continue effect - vibrato,tremolo }
  95.                    VibtabOfs   :word;     { yo for each channel its own choise (default = OFS sinuswave) }
  96.                    TrmtabOfs   :word;     { = Offset of wavetable for tremolo }
  97.                    tablepos    :byte;     { <- we reset this if a effect starts uses such a table }
  98.                    VibPara     :byte;     { <- for dual command Vib + Vol }
  99.                    PortPara    :byte;     { <- for dual command Port + Vol }
  100.                    OldPeriod   :word;     { save that value for some effects }
  101.                    Oldvolume   :byte;     { save that value for tremolo }
  102.                    WantedPeri  :word;     { <- period to slide to with Portamento }
  103.                    ArpegPos    :byte;     { which of those 3 notes we currently play ... }
  104.                    note1       :byte;     { \ }
  105.                    note2       :byte;     { -+ note : 3 notes we do arpeggio between }
  106.                    Step0       :dword;    { \ }
  107.                    Step1       :dword;    {  |- the 3 step values we switch between in arpeggio effect (0 is start value
  108.                                              <- we have to refesh after arpeggio) }
  109.                    Step2       :dword;    { / }
  110.                    ctick       :byte;     { ticks left to retrigg not }
  111.                    savNote     :byte;     { \  }
  112.                    savInst     :byte;     {  | - new values for notedelay ... }
  113.                    SavVol      :byte;     {  | }
  114.                    ndTick      :byte;     { /  }
  115.                  end;
  116.  
  117.      TInstr         = array[0..16*5-1] of byte;
  118.      TInstrArray    = array[1..MAX_Samples]   of TInstr;
  119.      TPatternSarray = array[0..MAX_patterns]  of word;         { segment for every pattern }
  120.      TOrderArray    = array[0..MAX_orders]    of byte;         { song arrangement }
  121.      TchannelArray  = array[0..MAX_channels-1] of Tchannel;    { all public/private data for every channel }
  122.      PArray         = ^TArray;
  123.      TArray         = array[0..65532] of byte;